#include <stdio.h>
#include <math.h>

const int max=50000;
//n=a1^b1*a2^b2*...*ak^bk k (b1+b2+..+bk)最多16 2^16>50000
const int Max_ss=16;

int A[10000],aLen;

void printArray2(int** input1,int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%d\t%d\n",input1[i][0],input1[i][1]);
    }
    printf("\n");
}

void mul(int x) {
  int v = 0;
  for (int i = 0; i < aLen; ++i) {
    v = (A[i] = A[i] * x + v) / 10;
    A[i] %= 10;
  }
  while (v) A[aLen++] = v % 10, v /= 10;
}

int main(){
    int n;
    //存储1-n所有的质数
    int ss[max];
    int len=0;
    int i,j,k;

    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        int flag=1;
        for(j=0;j<len;j++)
        {
            if(i%ss[j]==0)
            {
                flag=0;
                break;
            }
        }
        if(flag)
        {
            ss[len]=i;
            len++;
        }
    }


    //存储n的因式分解值
    int** ysfj=new int*[Max_ss];
    int ysfj_len=0;

    int tmp=n;
    i=0;
    while (tmp>=1&&i<len)
    {
        if(tmp%ss[i]==0)
        {
            ysfj[ysfj_len]=new int[2];
            ysfj[ysfj_len][0]=ss[i];
            ysfj[ysfj_len][1]=0;
            ysfj_len++;
            while(tmp%ss[i]==0){
                tmp=tmp/ss[i];
                ysfj[ysfj_len-1][1]++;
            }
        }
        i++;
    }

    // printArray2(ysfj,ysfj_len);

    //用来储存答案
    int result[Max_ss];
    //用来对比
    double result_db[Max_ss];
    for(i=0;i<Max_ss;i++)
    {
        result[i]=1;
        result_db[i]=log(ss[i]);
    }
    for(i=ysfj_len-1;i>=0;i--)
    {
        for(j=0;j<ysfj[i][1];j++)
        {
            int num=ysfj[i][0];
            int index=0;
            double minValue=result_db[0];
            if(result[0]>1)
            {
                for(k=1;k<Max_ss;k++)
                {
                    if(minValue>=result_db[k])
                    {
                        index=k;
                        minValue=result_db[k];
                    }
                    if(result[k]==1)
                    {
                        break;
                    }
                }
            }
            result[index]=result[index]*num;
            result_db[index]=num*result_db[index];
        }
    }

    A[0]=1;
    aLen=1;
    // for(i=0;i<Max_ss;i++)
    // {
    //     if(result[i]==1){
    //         break;
    //     }
    //     else{
    //         printf("%d\t%d\n",ss[i],result[i]);
    //     }
    // }

    //高精度乘法 计算出10进制答案
    for(i=0;i<Max_ss;i++)
    {
        if(result[i]==1){
            break;
        }
        else{
            for(j=1;j<result[i];j++){
                mul(ss[i]);
            }
        }
    }
    for(i=aLen-1;i>=0;i--)
    {
        printf("%d",A[i]);
    }
    printf("\n");

    for(i=0;i<ysfj_len;i++)
    {
        delete ysfj[i];
    }
    delete ysfj;
    



}